<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>fastjson使用和源代码</title>
    <style>
        body {
            background-color: #c7edcc
        }
    </style>
</head>
<body>
<pre>
    一般用法:
    Bean b = new Bean();
    String json = JSON.toJSONString(b, SerializerFeature.WriteClassName);//可以指定各种Feature,Filter
    b = JSON.parseObject(json, Bean.class);

    序列化:

    序列化首先创建一个SerializeWriter, 一个比StringBuilder更加高效的字符拼接类,专门用于构建json字符串

    然后新建JSONSerializer,其属性包含了SerializeWriter和SerializeConfig,而SerializeConfig是个很重要的类,其继承IdentityHashMap(一个长度固定的hashMap)用于缓存Serialize
    .SerializeConfig初始化包含了许多基本的ObjectSerializer,用于序列化和反序列化基本的属性(比如String, int等).当执行序列化时,首先调用JSONSerialize的getObjectWriter
    ,查找writer, 其再委托SerializeConfig查找writer,范存中有的话直接返回,否则创建一个JavaBeanSerializer(关闭asm),其中会使用反射分析类get方法,注解等,得到一个FieldInfoList
    然后根据这个List为每个字段创建ObjectFieldSerializer.   方法返回ObjectSerializer,然后调用write方法.

    这里有一个递归调用,假如要序列化的是一个基本属性,会直接调用对应的serialize,如果是一个bean会执行紧接着上面的调用,当遍历每一个属性的时候,又会调用JSONSerialize的write方法重复前面的步骤




    反序列化:



</pre>
</body>
</html>